home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1997 July
/
EnigmA AMIGA RUN 20 (1997)(G.R. Edizioni)(IT)[!][issue 1997-07 & 08][EAR-CD IV].iso
/
earcd
/
biz
/
haage
/
stormc_w.lha
/
Wizard-Library
/
libraries
/
wizardstring.h
< prev
next >
Wrap
C/C++ Source or Header
|
1996-10-28
|
28KB
|
661 lines
#ifndef WIZARD_WIZARDSTRING_H
#define WIZARD_WIZARDSTRING_H
#include <exec/tasks.h>
struct WizardStringInfo
{
struct TextFont *DefFont;
struct Hook *DefHook;
struct IBox Dimension;
struct RastPort CalcRPort;
UBYTE Translation[256];
UWORD (*LineWidth)[];
UWORD LineHeight;
ULONG TextLen;
UBYTE *Buffer;
UBYTE *Undo;
UBYTE *Paste;
ULONG BufferSize;
ULONG UndoSize;
ULONG PasteSize;
UWORD TabPixel;
UWORD Justification;
UWORD Lines;
UWORD MaxLines;
LONG TextTop;
LONG TextLeft;
ULONG TextWidth;
ULONG TextHeight;
struct
{
WORD pos;
WORD line;
}Mark;
struct
{
WORD pos;
WORD line;
}Cursor;
struct
{
UWORD BGPen;
UWORD TextPen;
UWORD SBGPen;
UWORD STextPen;
UWORD CBGPen;
UWORD CTextPen;
}
PenArray;
UWORD Flags;
UWORD HookFlags;
ULONG Seconds;
ULONG Micros;
UWORD DefMode;
UWORD Reserved;
LONG Value;
LONG MinVal;
LONG MaxVal;
};
#define WINTEGERMODE_DEZ 0
#define WINTEGERMODE_BIN 1
#define WINTEGERMODE_HEX 2
#define WSTRINGFLAG_ACTIVE 1
#define WSTRINGFLAG_MOUSE 2
#define WSTRINGFLAG_KEYMARK 4
// Hook-Methoden, die öffentlich sind *******************************
/********************************************************************
** **
** Bei einer unbekannten Methode, ist diese an das Object zurück **
** zu geben. Dabei muß der Returnwert weitergegeben werden. **
** **
** Private Hooks, die den Standard-Hook nicht ersetzen wollen, **
** müssen unbekannte Methoden an den Standard-Hook zurückgeben. **
** Die Adresse des Standardhooks finden Sie im UserData des neu **
** installierten Hooks. Ermitteln Sie diesen immer aufs Neue ! **
** **
** Achtung: In Zukunft werden neue Methoden definiert, so das der **
** Standardhook IMMER berücksichtgt werden muß !
** **
********************************************************************/
#define WSTRINGM_DUMMY 0x100200
#define WSTRINGM_INIT WSTRINGM_DUMMY+0
#define WSTRINGM_GET WSTRINGM_DUMMY+1
#define WSTRINGM_SET WSTRINGM_DUMMY+2
#define WSTRINGM_INITTEXT WSTRINGM_DUMMY+3
#define WSTRINGM_CALCULATEGLYPH WSTRINGM_DUMMY+4
#define WSTRINGM_RENDERLINE WSTRINGM_DUMMY+5
#define WSTRINGM_GOACTIVE WSTRINGM_DUMMY+6
#define WSTRINGM_GOINACTIVE WSTRINGM_DUMMY+7
#define WSTRINGM_HANDLEINPUT WSTRINGM_DUMMY+8
#define WSTRINGM_TEXTFIT WSTRINGM_DUMMY+9
#define WSTRINGM_POINTVISIBLE WSTRINGM_DUMMY+10
#define WSTRINGM_INSTALLCLIP WSTRINGM_DUMMY+11
#define WSTRINGM_UNINSTALLCLIP WSTRINGM_DUMMY+12
#define WSTRINGM_RENDERROWS WSTRINGM_DUMMY+13
#define WSTRINGM_MAKEVISIBLE WSTRINGM_DUMMY+15
#define WSTRINGM_UPDATE WSTRINGM_DUMMY+16
#define WSTRINGM_SETMARK WSTRINGM_DUMMY+17
#define WSTRINGM_SETCURSOR WSTRINGM_DUMMY+18
#define WSTRINGM_TEXTLEFT WSTRINGM_DUMMY+19
#define WSTRINGM_TEXTTOP WSTRINGM_DUMMY+20
#define WSTRINGM_MOVECURSOR WSTRINGM_DUMMY+21
#define WSTRINGM_INSERTSTRING WSTRINGM_DUMMY+22
#define WSTRINGM_COPYBUFFER WSTRINGM_DUMMY+23
#define WSTRINGM_INITLINEUNDO WSTRINGM_DUMMY+24
#define WSTRINGM_ARROWSTEP WSTRINGM_DUMMY+25
/********************************************************************
** **
** WSTRINGM_INIT: **
** **
** Returnwert soll immer TRUE sein. **
** **
** Wenn der Hook diese Methode nicht behandelt, dann kann er Sie **
** ignorieren. In AttrList stehen die Tags, die bei OM_NEW über- **
** geben wurden. Dieses Funktion dient zum Vorinitialisieren der **
** StringInfo-Struktur. **
** **
********************************************************************/
struct WizardStringInit
{
ULONG MethodID;
struct WizardStringInfo *wspi_StringInfo;
struct TagItem *wspi_AttrList;
APTR wspi_InstData;
};
/********************************************************************
** **
** WSTRINGM_GET: **
** **
** Returnwert ist wie bei OM_GET. **
** **
** Wenn der Hook diese Methode nicht behandlet, dann kann er Sie **
** an das Object zurück schicken. Wobei dieses dann diese Methode **
** behandelt. **
** **
** Möchte der Hook dagegen diese Methode behandeln, dann muß er **
** Sie an das Object mit der Superklasse weiterleiten, aber mit **
** der Methode OM_GET und der Struktur opGet !!! **
** **
********************************************************************/
struct WizardStringGet
{
ULONG MethodID;
struct WizardStringInfo *wspg_StringInfo;
struct IClass *wspg_Class;
ULONG wspg_AttrID;
ULONG wspg_Storage;
};
/********************************************************************
** **
** WSTRINGM_SET: **
** **
** Returnwert ist wie bei OM_SET. **
** **
** Wenn der Hook diese Methode nicht behandlet, dann kann er Sie **
** an das Object zurück schicken. Wobei dieses dann diese Methode **
** behandelt. **
** **
** Möchte der Hook dagegen diese Methode behandeln, dann muß er **
** Sie an das Object mit der Superklasse weiterleiten, aber mit **
** der Methoder OM_SET und der Struktur opSet !!! **
** **
********************************************************************/
struct WizardStringSet
{
ULONG MethodID;
struct WizardStringInfo *wsps_StringInfo;
struct GadgetInfo *wsps_GInfo;
struct IClass *wsps_Class;
struct TagItem *wsps_AttrList;
ULONG wsps_Redraw;
};
/********************************************************************
** **
** WSTRINGM_INITTEXT: **
** **
** Returnwert ist undefiniert, behandelt der Hook diese Methode, **
** dann muß er nicht an das Object weitergegeben werden ! **
** **
** Diese Methode wird von der Standard Set-Methode ausgelösst und **
** dient dem Berechnen der Dimension des gesamten Textes. **
** **
** Die Textaddresse steht dabei in StringInfo->buffer. **
** Dabei muß TextWidth, TextHeight und Lines eingetragen werden. **
** Der RastPort ist temporär und darf nur für Berechnungen wie **
** TextLength() oder ähnliches benutzt werden,er wurde mit **
** InitRastPort() vorinitialisiert. **
** **
** Setzen Sie bitte StringInfo->Lines auf die Anzahl der Zeilen. **
** **
********************************************************************/
struct WizardStringInitText
{
ULONG MethodID;
struct WizardStringInfo *wspit_StringInfo;
};
/********************************************************************
** **
** WSTRINGM_CALCULATEGLYPH: **
** **
** Diese Methode dient dem Ausrechnen der Position und Breite des **
** angegebenen Zeichens. Möchten Sie die Breite der gesamten Zeile **
** wissen, dann sollten Sie in LeftEdge eine NULL eingeben und als **
** Position des zu berechnenden Zeichens die Länge der Zeile. **
** **
********************************************************************/
struct WizardStringCalculateGlyph
{
ULONG MethodID;
struct WizardStringInfo *wspcg_StringInfo;
UWORD wspcg_Char;
UWORD wspcg_LeftEdge;
UBYTE *wspcg_Address;
UWORD *wspcg_GlyphLeftEdge;
UWORD *wspcg_GlyphWidth;
};
/********************************************************************
** **
** WSTRINGM_RENDERLINE: **
** **
** Returnwert ist undefiniert, behandelt der Hook diese Methode, **
** dann muß er nicht an das Object zurückgegeben werden ! **
** **
** Dabei muß der Hook die Darstellung dieser einen Zeile über- **
** nehmen. Die StringInfo-Struktur darf nur gelesen werden ! **
** Der RastPort ist mit einer gültigen Clipping-Region versehen **
** MinX und MaxX sollen ihnen helfen Elemente bereits ein wenig **
** vorzuclippen, so das das Zeichnen selbst sehr schnell geht. **
** **
********************************************************************/
struct WizardStringRenderLine
{
ULONG MethodID;
struct WizardStringInfo *wsprl_StringInfo;
struct DrawInfo *wsprl_DrInfo;
struct RastPort *wsprl_RPort;
char *wsprl_Address;
ULONG wsprl_Line;
ULONG wsprl_Cursor;
ULONG wsprl_MarkBegin;
ULONG wsprl_MarkEnd;
LONG wsprl_LeftEdge;
LONG wsprl_TopEdge;
LONG wsprl_MinX; // ClipGrenzen
LONG wsprl_MaxX; // ClipGrenzen
};
/********************************************************************
** **
** WSTRINGM_TEXTFIT: **
** **
** Errechnet die Anzahl der Zeichen, die in den angegebenene Ab- **
** schnitt passen und gibt die Breite zurück. **
** **
** Der Returnwert ist die Anzahl der Zeichen, die passen. **
** **
********************************************************************/
struct WizardStringTextFit
{
ULONG MethodID;
struct WizardStringInfo *wsptf_StringInfo;
UBYTE *wsptf_Address;
ULONG wsptf_LeftEdge;
ULONG wsptf_MaxWidth;
UWORD *wsptf_TextWidth;
};
/********************************************************************
** **
** WSTRINGM_POINTVISIBLE: **
** **
** Diese Methode darf vom Hook an das Object weitergegeben werden, **
** um zu erfahren, ob die Mouse innerhalb des Objektes ist, dabei **
** wird die umgebenden Clippingregion berücksichtigt (Fenster- **
** ränder etc.). **
** **
** Der Returnwert ist TRUE, wenn er sichtbar ist,alos zum Object **
** gehört. Die Angaben müssen absolut sein !!! **
** **
********************************************************************/
struct WizardStringPointVisible
{
ULONG MethodID;
struct
{
LONG X;
LONG Y;
} wsppv_Mouse;
};
/********************************************************************
** **
** WSTRINGM_GOACTIVE: **
** WSTRINGM_HANDLEINPUT: **
** **
** Der Returnwert ist identisch mit den entsprechenden Methoden **
** des BOOPSI-Systems. **
** **
** Diese Methoden müssen vom Hook behandlet werden, da Sie das **
** spezifische Verhalten eines String ausmachen. Um die Node unter **
** der Mouse in Erfahrung zu bringen können Sie von hier aus die **
** Methode WSTRINGM_MOUSEITEM an das Object senden. Dadurch können **
** Sie sich einige Arbeit sparen. **
** **
********************************************************************/
struct WizardStringInput
{
ULONG MethodID;
struct WizardStringInfo *wspi_StringInfo;
struct GadgetInfo *wspi_GInfo;
struct InputEvent *wspi_IEvent;
struct
{
LONG X;
LONG Y;
} wspi_Mouse;
};
/********************************************************************
** **
** WSTRINGM_GOINACTIVE: **
** **
** Der Returnwert ist undefiniert. **
** Diese Methode muß vom Hook behandlet werden. **
** **
********************************************************************/
struct WizardStringInActive
{
ULONG MethodID;
struct WizardStringInfo *wspia_StringInfo;
struct GadgetInfo *wspia_GInfo;
ULONG wspia_Abort;
};
/********************************************************************
** **
** WSTRINGM_INSTALLCLIP: **
** **
** Der Returnwert ist FALSE, wenn ein Fehler aufgetreten ist. **
** Sollte dies der Fall sein, dann wurde die Clippingregion NICHT **
** installiert ! Das Clipprectangle wird mit dem umgebenden Clip- **
** rectangle logisch verknüpft. **
** **
********************************************************************/
struct WizardStringInstallClip
{
ULONG MethodID;
struct WizardStringInfo *wspic_StringInfo;
struct GadgetInfo *wspic_GInfo;
struct RastPort *wspic_RPort;
struct Region **wspic_OldRegion;
struct Rectangle *wspic_ClipRectangle;
};
/********************************************************************
** **
** WSTRINGM_UNINSTALLCLIP: **
** **
** Der Returnwert ist undefiniert. **
** **
********************************************************************/
struct WizardStringUnInstallClip
{
ULONG MethodID;
struct GadgetInfo *wspuic_GInfo;
struct RastPort *wspuic_RPort;
struct Region *wspuic_OldRegion;
};
/********************************************************************
** **
** WSTRINGM_MAKEVISIBLE: **
** **
** Beauftragt das Object das angegebene Char voll sichtbar zu **
** machen. Dabei prüft das Object, ob der Char überhaupt in den **
** sichtbaren Bereich gebracht werden muß. **
** **
** Der Returnwert ist undefiniert. **
** **
********************************************************************/
struct WizardStringMakeVisible
{
ULONG MethodID;
struct WizardStringInfo *wspmv_StringInfo;
struct GadgetInfo *wspmv_GInfo;
ULONG wspmv_Line;
ULONG wspmv_Pos;
};
/********************************************************************
** **
** WSTRINGM_UPDATE: **
** **
** Beauftragt das Object den angegebene Bereich neu zu zeichnen, **
** außerdem wird das vertikale Linkobject mit neuen Listendaten **
** versorgt. **
** **
** Der Returnwert ist undefiniert. **
** **
********************************************************************/
struct WizardStringUpdate
{
ULONG MethodID;
struct WizardStringInfo *wspu_StringInfo;
struct GadgetInfo *wspu_GInfo;
struct RastPort *wspu_RPort;
LONG wspu_MinX;
LONG wspu_MaxX;
LONG wspu_MinY;
LONG wspu_MaxY;
};
/********************************************************************
** **
** WSTRINGM_RENDERROWS: **
** **
** Beauftragt das Object die angegebenen Zeilen neu darzustellen, **
** dabei muß in Count die Anzahl der zusätzlichen Zeilen stehen, **
** welche ebenfalls noch dargestellt werden soll. **
** **
** Der Returnwert ist undefiniert. **
** **
********************************************************************/
struct WizardStringRenderRows
{
ULONG MethodID;
struct WizardStringInfo *wsprr_StringInfo;
struct DrawInfo *wsprr_DrInfo;
struct RastPort *wsprr_RPort;
UBYTE *wsprr_Address;
ULONG wsprr_Line;
ULONG wsprr_Count;
};
/********************************************************************
** **
** WSTRINGM_SETMARK: **
** **
** Beauftragt das Object die Methoder durchzuführen, dabei werden **
** alle notwendigen Änderungen am Schirm durchgeführt. **
** **
** Der Returnwert ist undefiniert. **
** **
********************************************************************/
struct WizardStringSetMark
{
ULONG MethodID;
struct WizardStringInfo *wspsm_StringInfo;
struct GadgetInfo *wspsm_GInfo;
struct RastPort *wspsm_RPort;
ULONG wspsm_Line;
ULONG wspsm_Pos;
};
/********************************************************************
** **
** WSTRINGM_SETCURSOR: **
** **
** Beauftragt das Object die Methoder durchzuführen, dabei werden **
** alle notwendigen Änderungen am Schirm durchgeführt. **
** **
** Der Returnwert ist undefiniert. **
** **
********************************************************************/
struct WizardStringSetCursor
{
ULONG MethodID;
struct WizardStringInfo *wspsc_StringInfo;
struct GadgetInfo *wspsc_GInfo;
struct RastPort *wspsc_RPort;
ULONG wspsc_Line;
ULONG wspsc_Pos;
};
/********************************************************************
** **
** WSTRINGM_TEXTLEFT: **
** **
** Beauftragt das Object die Methode durchzuführen, dabei werden **
** alle notwendigen Änderungen am Schirm durchgeführt. Eventuelle **
** Link-Objekte werden berücksichtigt. **
** **
** Der Returnwert ist undefiniert. **
** **
********************************************************************/
struct WizardStringTextLeft
{
ULONG MethodID;
ULONG wsptl_TextLeft;
struct GadgetInfo *wsptl_GInfo;
};
/********************************************************************
** **
** WSTRINGM_TEXTTOP: **
** **
** Beauftragt das Object die Methode durchzuführen, dabei werden **
** alle notwendigen Änderungen am Schirm durchgeführt. Eventuelle **
** Link-Objekte werden berücksichtigt. **
** **
** Der Returnwert ist undefiniert. **
** **
********************************************************************/
struct WizardStringTextTop
{
ULONG MethodID;
ULONG wsptt_TextTop;
struct GadgetInfo *wsptt_GInfo;
};
/********************************************************************
** **
** WSTRINGM_MOVECURSOR: **
** **
** Beauftragt das Object die Marke und den Cursor zu setzten und **
** alle notwendigen Änderungen am Schirm durchgeführt. Dabei wird **
** gleichzeitig die Sichtbarkeit des Cursors gecheckt. **
** **
** Der Returnwert ist undefiniert. **
** **
********************************************************************/
struct WizardStringMoveCursor
{
ULONG MethodID;
struct WizardStringInfo *wspmc_StringInfo;
struct GadgetInfo *wspmc_GInfo;
ULONG wspmc_Line;
ULONG wspmc_Pos;
};
/********************************************************************
** **
** WSTRINGM_INSERTSTRING: **
** **
** Beauftragt das Object die Marke und den Cursor zu setzten und **
** alle notwendigen Änderungen am Schirm durchgeführt. Dabei wird **
** gleichzeitig die Sichtbarkeit des Cursors gecheckt. **
** **
** Der Returnwert ist undefiniert. **
** **
********************************************************************/
struct WizardStringInsertString
{
ULONG MethodID;
struct WizardStringInfo *wspis_StringInfo;
struct GadgetInfo *wspis_GInfo;
UBYTE *wspis_InsertString;
UBYTE *wspis_CutBuffer;
ULONG wspis_CutBufferSize;
};
/********************************************************************
** **
** WSTRINGM_COPYBUFFER: **
** **
** Beauftragt das Object den markierten Bereich in den angegebenen **
** Buffer zu kopieren. Eine Änderung am Schirm erfolgt nicht ! **
** **
** Der Returnwert ist undefiniert. **
** **
********************************************************************/
struct WizardStringCopyBuffer
{
ULONG MethodID;
struct WizardStringInfo *wspcb_StringInfo;
UBYTE *wspcb_Buffer;
ULONG wspcb_BufferSize;
};
/********************************************************************
** **
** WSTRINGM_INITLINEUNDO: **
** **
** Beauftragt das Object die angegebene Zeile in den Undo-Buffer **
** der StringInfo-Struktur zu kopieren. Später kann man diesen **
** wieder in diese Zeile einfügen lassen. **
** **
** Der Returnwert ist undefiniert. **
** **
********************************************************************/
struct WizardStringInitLineUndo
{
ULONG MethodID;
struct WizardStringInfo *wspilu_StringInfo;
};
/********************************************************************
** **
** WSTRINGM_ARROWSTEP: **
** **
** Returnwert ist undefiniert. **
** **
** Wenn der Hook diese Methode nicht behandelt, dann kann er Sie **
** ignorieren. In AttrList stehen die Tags, die bei OM_NEW über- **
** geben wurden. Dieses Funktion dient zum Vorinitialisieren der **
** StringInfo-Struktur. **
** **
********************************************************************/
struct WizardStringArrowStep
{
ULONG MethodID;
struct WizardStringInfo *wspas_StringInfo;
struct GadgetInfo *wspas_GInfo;
ULONG wspas_Type;
ULONG wspas_Step;
};
#endif /* WIZARD_WIZARDVIEW_H */